Event-responsive download of portions of streamed applications

ABSTRACT

Disclosed here are implementations involving an application program that includes an event handling portion. The event handling portion monitors for an event associated with execution of an initial portion of the application program downloaded with the event handling portion that involves an additional portion of the application program not yet downloaded. In response to detecting the event, the execution of the initial portion of the application program is paused by the event handler and downloading of the additional portion is initiated. Upon downloading the additional portion of the application program, execution of the initial portion of the application program can resume.

RELATED APPLICATIONS

This application is a continuation of, and claims the benefit ofpriority to, U.S. patent application Ser. No. 13/474,149, entitled“Event-Responsive Download of Portions of Streamed Applications,” filedon May 17, 2012, and which is hereby incorporated by reference in itsentirety.

TECHNICAL FIELD

Aspects of the disclosure are related to computing applications, and inparticular, to the streaming of application programs.

TECHNICAL BACKGROUND

The streaming of application programs over networks for execution onlocal computing devices is a considerably complex endeavor that allowsfor quick enjoyment of an application without having to first fullyinstall the application. Most streaming solutions require modificationsto the operating system, such as installing a specialized driver, beforea program can be streamed. Once this is accomplished, at least aninitial portion of the program is downloaded before it can be launched.The specialized driver assists in the background with retrievingadditional portions of the program while the initial portion runs.

In general, the smaller the initial portion is, the less time it takesto launch the program. However, as the size of the initial portion ofthe program is reduced, the likelihood that the initial portion may needto jump to another portion of the program that has not yet beendownloaded increases.

One solution handles this challenge by monitoring for page faults causedby such jumps. A memory manager responds to a page fault by requestingthe relevant page from a file system. A specialized driver coupled witha streaming engine interacts with the file system to retrieve the pagefrom a network location. The page is then provided to the file systemand, in turn, to the memory manager. The relevant page is ultimatelydeposited in memory and the program can continue to run until the nextpage fault occurs, thereby triggering a repeat of the aforementionedprocess.

OVERVIEW

Provided herein are systems, methods, and software for facilitating thestreaming of application programs. In particular, implementationsdisclosed herein pertain to application programs capable ofself-streaming by monitoring for events triggered by other portions ofthe applications requiring additional portions to be downloaded.

In one implementation, an application program includes an event handlingportion that monitors for an event associated with execution of aninitial portion of the application program downloaded with the eventhandling portion. The execution of the initial portion involves anadditional portion of the application program not yet downloaded to thecomputing system. In response to detecting the event, the execution ofthe initial portion of the application program is paused by the eventhandler and downloading of the additional portion is initiated. Upondownloading the additional portion of the application program, executionof the initial portion of the application program can resume.

This Overview is provided to introduce a selection of concepts in asimplified form that are further described below in the TechnicalDisclosure. It should be understood that this Overview is not intendedto identify key features or essential features of the claimed subjectmatter, nor is it intended to be used to limit the scope of the claimedsubject matter.

BRIEF DESCRIPTION OF THE DRAWINGS

Many aspects of the disclosure can be better understood with referenceto the following drawings. While several implementations are describedin connection with these drawings, the disclosure is not limited to theimplementations disclosed herein. On the contrary, the intent is tocover all alternatives, modifications, and equivalents.

FIG. 1 illustrates an event handling process in an implementation.

FIG. 2 illustrates a streaming environment in an implementation.

FIG. 3 illustrates a streaming environment in an implementation, as wellas a method of operation.

FIG. 4 illustrates a streaming environment in an implementation, as wellas a method of operation.

FIG. 5 illustrates a component view of an application program in animplementation.

TECHNICAL DISCLOSURE

Implementations described herein provide for improved streaming ofapplication programs. In particular, an application program describedherein includes several portions that, upon being downloaded andlaunched, allow for the streaming of additional portions of theapplication. An event handler portion contained within the applicationitself is capable of monitoring for events triggered by the execution ofother portions of the application that might invoke, implicate, orotherwise involve another portion not yet downloaded. The event handlercan then initiate action to retrieve or otherwise download that portionfor introduction and execution as part of the application.

Referring now to the drawings, FIG. 1 is provided to illustrate a methodor process that is performed by elements of computing system 201 fromFIG. 2 to facilitate application streaming FIG. 2 illustrates a suitablecomputing environment in which to implement event handling process 100.FIG. 3 and FIG. 4 illustrate two more suitable computing environments inwhich to implement processes for facilitating the streaming ofapplication programs. Finally, FIG. 5 illustrates a module or componentview of one such application.

Turning now to FIG. 1, event handling process 100 illustrates theoperation of an event handler portion, herein referred to as eventhandler 213, of application program 210 that facilitates streaming fromcomputing system 221 to computing system 201. During the downloadprocess, computing systems 201 and 221 communicate via communicationinterfaces 207 and 227 respectively to stream application program 210 tocomputing system 201. To accomplish this, portions of applicationprogram 210 are streamed or downloaded to computing system 201immediately, while the remaining portions are either graduallydownloaded in the background or selectively downloaded in an acceleratedmanner per event handling process 100. In this example, initial portion212 and event handler 213 are successfully transferred to computingsystem 201 and execution of them by processing system 203 can commence.

Upon being downloaded from computing system 221 to computing system 201over communication network 215, event handler 213 monitors for eventstriggered by or otherwise associated with initial portion 212 thatinvolve additional portion 211 (step 101). In this example, it isassumed that additional portion 211 is yet to be downloaded. Thus, upondetecting the event, event handler 213 pauses the execution of initialportion 212 and initiates a download of additional portion 211 fromcomputing system 221 (step 103). Upon successfully downloadingadditional portion 211, event handler 213 resumes or otherwise allowsfor the resumption of the execution of initial portion 212 (Step 105).

It should be understood that the portion of application program 210remaining to be downloaded from computing system 221 after initialportion 212 and event handler 213 are downloaded may include otherportions in addition to additional portion 211. In other words, upondownloading initial portion 212 and event handler 213, a backgrounddownload process may execute that gradually transfers any remainingportions of application program 210 to computing system 201. However,event handler 213 functions to immediately retrieve any additionalportions that may be invoked or otherwise involved by the execution ofinitial portion 212.

Referring now to FIG. 2, streaming environment 200, in which eventhandling process 100 may be implemented, includes computing system 201,computing system 221, and communication network 215 over which anapplication program or programs can be streamed. It should be understoodthat more computing systems may be present in streaming environment 200.In addition, many other configurations of computing devices and softwarecomputing systems may be employed to implement event handling process100.

Computing system 201 communicates with computing system 221 overcommunication network 215. Communication network 215 may be astand-alone network, but may also include a collection of networks.Computing system 201 is intended to represent a suitable system forimplementing event handling process 100, and in general, a systemsuitable for running applications streamed to it from network locations,such as computing system 221. Computing system 221 is intended torepresent a system suitable for hosting applications that can bestreamed to local devices, such as computing system 201.

Computing system 201 may be any type of computing system capable ofexecuting an event handler to monitor for events, pause an initialportion of an application program downloaded with the event handler, andinitiate a download of additional portions of the application program,as described by event handling process 100. Examples of computing system201 include personal computers, laptop computers, tablet computers,mobile computing devices, mobile phones, and other types of devices,computers, or appliances capable of executing applications streamed fromnetwork locations. Indeed, computing system 201 may be implemented as asingle computing system, but may also be implemented in a distributedmanner across multiple computing systems. Computing system 201 isprovided as an example of a general purpose computing system that, whenimplementing event handling process 100, becomes a specialized systemcapable of executing streamed applications.

Computing system 201 includes processing system 203, storage system 205,memory region 206, communication interface 207, and user interface 208.Processing system 203 is communicatively coupled with storage system205, communication interface 207, and user interface 208. Storage system205 stores software in memory region 206, such as application program210, which when executed by processing system 203, directs computingsystem 201 to operate as described for event handling process 100.

In particular, upon being downloaded from computing system 221, initialportion 212 and event handler 213 are stored in a region of memory 206allocated to application program 210 and can be executed by processingsystem 203. In other words, initial portion 212 and event handler 213can be considered a part of application program 210. It should beunderstood that initial portion 212 and event handler 213 are not partof an operating system, although either or both may communicate withelements of an operating system.

Referring still to FIG. 2, processing system 203 may comprise amicroprocessor and other circuitry that retrieves and executesapplication program 210, and in particular event handler 213, frommemory region 206 in storage system 205. Event handler 213 includesevent handling process 100. Processing system 203 may be implementedwithin a single processing device but may also be distributed acrossmultiple processing devices or sub-systems that cooperate in executingprogram instructions. Examples of processing system 203 include generalpurpose central processing units, application specific processors, andlogic devices, as well as any other type of processing device.

Storage system 205 may comprise any storage media readable by processingsystem 203 and capable of storing software in memory region 206. Memoryregion 206 may be a region within virtual memory, non-virtual memory, ora combination or variation of both. Storage system 205 may includevolatile and nonvolatile, removable and non-removable media implementedin any method or technology for storage of information, such as computerreadable instructions, data structures, program modules, or other data.Storage system 205 may be implemented as a single storage device but mayalso be implemented across multiple storage devices or sub-systems.Storage system 205 may comprise additional elements, such as acontroller, capable of communicating with processing system 203.

Examples of storage media include random access memory, read onlymemory, magnetic disks, optical disks, and flash memory, as well as anycombination or variation thereof, or any other type of storage media. Insome implementations, the storage media may be a non-transitory storagemedia. In some implementations, at least a portion of the storage mediamay be transitory. It should be understood that in no case is thestorage media a propagated signal.

Application program 210 comprises computer program instructions, such asinitial portion 212, event handler 213, and additional portion 211 (upondownload of it to computing system 201). Other software in addition toapplication program 210 may be implemented in computing system 201, suchas operating system software or other application software. The othersoftware may comprise firmware, or some other form of machine-readableprocessing instructions that interact with application program 210.

In general, application program 210 may, when loaded into processingsystem 203 and executed, transform processing system 203, and computingsystem 201 overall, from a general-purpose computing system into aspecial-purpose computing system customized to facilitate the streamingof application program 210 as described herein for event handlingprocess 100. However, it should be understood that, while the executionof application program 210 may transform computing system 201 in aspecial-purpose system, other specialized components are obviated byapplication program 210, such as the specialized drivers discussed abovewith respect to the background.

Indeed, encoding application program 210 on storage system 205 as it isstreamed to computing system 201 may transform the physical structure ofstorage system 205. The specific transformation of the physicalstructure may depend on various factors in different implementations ofthis description. Examples of such factors may include, but are notlimited to: the technology used to implement the storage media ofstorage system 205, whether the computer-storage media are characterizedas primary or secondary storage, and the like.

For example, if the computer-storage media are implemented assemiconductor-based memory, application program 210 may transform thephysical state of the semiconductor memory when the program is encodedtherein. For example, application program 210 may transform the state oftransistors, capacitors, or other discrete circuit elements constitutingthe semiconductor memory.

A similar transformation may occur with respect to magnetic or opticalmedia. Other transformations of physical media are possible withoutdeparting from the scope of the present description, with the foregoingexamples provided only to facilitate this discussion.

It should be understood that, prior to downloading any portion ofapplication program 210 to computing system 201, application program 210resides on computing system 221. In fact, even upon being downloaded tocomputing system 201, the source version of application program 210 maystill reside on computing system 221, available for streaming to othercomputing systems and devices. Thus, encoding application program 210 onstorage system 225 in computing system 221 may also transform thephysical structure of storage system 225. As mentioned previously, thespecific transformation of the physical structure may depend on variousfactors in different implementations of this description.

Referring again to FIGS. 1-2, through the operation of computer system201 employing application program 210, transformations may be performedin streaming environment 200. As an example, computing system 201 couldbe considered transformed from one state to another by the download ofadditional portion 211 of application program 210 from computing system221, selectively triggered by the operation of event handler 213. Inother words, in a first state, additional portion 211 is yet to bedownloaded while event handler 213 monitors for events associated withthe execution of initial portion 212. Upon detecting such an event,event handler 213 initiates the download of additional portion 211 tocomputing system 201, thereby changing computing system 201 to a second,different state that now includes additional portion 211 resident inmemory region 206.

Communication interface 207 may include communication connections anddevices that allow for communication between computing system 201 andcomputing system 221 over communication network 215. Examples ofconnections and devices that together allow for inter-systemcommunication include network interface cards, antennas, poweramplifiers, RF circuitry, transceivers, and other communicationcircuitry. The aforementioned network, connections, and devices are wellknown in the art and need not be discussed at length here.

User interface 208 may include a mouse, a voice input device, a touchinput device for receiving a gesture from a user, and other comparableinput devices and associated processing elements capable of receivinguser input from a user. Output devices such as a display, speakers,printer, and other types of output devices may also be included.

Computing system 221 may be considered generally analogous to computingsystem 201 in that it includes many elements corresponding to those ofcomputing system 201, such as processing system 223, storage system 225,and communication interface 227. Thus, a detailed discussion of theelements of computing system 221 is refrained from for purposes ofclarity. Examples of computing system 221 include server computers,virtual machines, network clusters, or any combination or variationthereof, as well as any other type of device, computer, or appliancecapable of streaming applications to local devices.

Turning now to FIG. 3 and FIG. 4, the facilitation of applicationstreaming is illustrated by way of two different examples. In FIG. 3,streaming environment 300 illustrates an example whereby streaming isfacilitated by the detection of access violations. In FIG. 4, streamingenvironment 400 illustrates monitoring read requests to facilitateapplication streaming Steaming environments 300 and 400 are provided toillustrate the various software components involved in facilitatingapplication streaming. The software components may be loaded into andexecuted on general purpose computing systems, such as computing systems201 and 221 illustrated in FIG. 2. However, an illustration anddiscussion of the various hardware components and other supportingcomponents is refrained from for purposes of clarity.

In FIG. 3, streaming environment 300 includes memory 305 and networklocation 315. Memory 305 may be implemented in any storage systemsimilar to storage system 205 illustrated in FIG. 2. Memory 305 may benon-virtual, virtual, or any combination or variation thereof. Networklocation 315 is any system or collection of systems capable of streamingapplication programs to a computing system within which memory 305 mayreside or be implemented, such as computing system 201 illustrated inFIG. 2.

In operation, an application program is requested to be streamed fromnetwork location 315 into memory 305 and executed therefrom. Toaccomplish this, a boot block or boot package is first downloaded fromnetwork location 315. In this illustration, the boot block includes atleast sets of program instructions 311 and 312, as well as stream faulthandler 314. Program instructions 311 and 312 may be part of variousfiles downloaded as part of the boot block that enable the applicationprogram to begin execution, such as dynamic link libraries, executablefiles, and the like. Stream fault handler 314 may also be programinstructions, but is referred to herein with greater specificity thanprogram instructions 311 and 312 for illustrative purposes.

Typically, the boot block is desired to be as small as possible so as toallow for very rapid launching of the application program. However, thesmaller the boot block, the more likely it is that the boot block lackscode or data files that must then be retrieved from network location315. Stream fault handler 314 functions to assist with the process ofidentifying when to retrieve additional portions of the applicationprogram from network location 315, as well as other functions. A moredetailed discussion of the elements of stream fault handler 314 followsbelow with respect to FIG. 5.

Upon downloading the boot block, stream fault handler 314, programinstructions 311, and program instructions 312 are loaded into orotherwise mapped to a portion of memory 305 allocated to the applicationprogram, namely, application region 310. In contrast, other portions ofmemory 305 may be allocated to other programs. For example, operatingsystem region 320 is allocated to memory manager 321 and networkinterface 322, which both may be considered part of the operatingsystem. Application region 310 may be referred to as or considered userspace within memory 305, whereas operating system region 320 may bereferred to as or considered kernel space within memory 305.

Further in operation, as described by operational sequence numbers inFIG. 3, while executing, program instructions 311 may cause a jump toprogram instructions 312 (step 391). While program instructions 311 areexecuting, stream fault handler 314 monitors for attempts to accessrestricted location 313 within application region 310. Stream faulthandler 314 may communicate with memory manager 321 to monitor for suchfaults. With respect to the jump from program instructions 311 toprogram instructions 312, no fault is incurred.

However, as illustrated in FIG. 3, program instructions 312 cause a jumpto restricted location 313 (step 392). This fault is detected byelements within the operating system and reported to stream faulthandler 314 by way of memory manager 321 (step 394). Access violationsare different than page faults in that a page fault occurs when aparticular page jumped to or requested by executing code is not loadedinto or mapped within a relevant memory space. In contrast, the accessviolation discussed herein is caused by a jump to a portion of memorythat is restricted. In other words, a page may be loaded in that space,but access restricted to it.

In fact, stream fault handler 314, program instructions 311, or programinstructions 312 may configure restricted location 313 as restrictedupon being downloaded and launched. Alternatively, other programelements downloaded within the boot block may perform the function ofrestricting access in order for later jumps to the space to triggeraccess violations. Restricted location 313 may be a marked page havingan access bit set to indicate the access restrictions placed upon it.

Having been notified of the access violation, stream fault handler 314proceeds to initiate a download of additional program instructions fromnetwork location. In this example, stream fault handler 314 communicatesa request to network interface 322 in operating system region 320 toobtain the additional program instructions (step 395). In some cases,stream fault handler 314 may perform the function of identifyingspecifically which program instructions or which remaining portion toobtain from network location 315. For example, stream fault handler 314may look-up the relevant portion that corresponds to the marked page inrestricted location 313. It should be understood that stream faulthandler 314 may communicate directly with network interface 322, but mayalso initiate the retrieval or otherwise communicate with networkinterface 322 by way of other intermediate elements.

Network interface 322 responsively communicates with network location315 to request the additional instructions (step 396). The request mayidentify a particular module, file range, or other such identifier thatallows systems or sub systems within network location 315 to identifythe relevant program instructions. Network location 315 then returns theadditional program instructions to network interface (step 397). In thisexample, the additional program instructions are provided to streamfault handler 314 (step 398) for insertion into an appropriate locationwithin application region 310. Stream fault handler 314 can then allowthe process associated with program instructions 312 that wasinterrupted by the access violation, to resume. This may include theexecution of the additional program instructions newly downloaded andmapped into memory.

While the preceding discussion made reference to additional programinstructions, it should be understood that other types of informationcould be retrieved from network location 315 in this manner. Forexample, program data may be retrieved. Examples of program data includebitmaps, tables, and the like. In other words, program instructions 312may be associated with a process that consumes data that has not yetbeen downloaded. Thus, an attempt to access a memory location mapped forthat data would trigger a similar access violation. The same process canbe followed to identify the relevant part of any remaining portion ofthe program application yet to be downloaded from network location 315.The data can be retrieved, loaded into memory, and then consumed by theprocess.

In FIG. 4, application streaming is facilitated in a manner differentthan in FIG. 3. Namely, streamlining environment 400 includes fileinput/output (I/O) manager 323 and operating system (O/S) interface 316.File I/O manager 323 services read requests made by applications thatare communicated to it by O/S interface 316. O/S interface 316 is partthe program application and provides an interface for other elements,such as program instructions 311 and 312, to make calls to operatingsystem services.

Accordingly, in the example illustrated in FIG. 4, program instructions312 make a read request to O/S interface 316 (step 392) to obtain datafrom a particular file that has yet to be downloaded from networklocation 315. The read request would normally be communicated to O/Sinterface 316. However, in this implementation the read request isintercepted by stream fault handler 314 (step 394).

Having been notified of the read request, stream fault handler 314proceeds to initiate a download of additional program instructions fromnetwork location. In this example, stream fault handler 314 communicatesa request to network interface 322 in operating system region 320 toobtain the relevant data (step 395). In some cases, stream fault handler314 may perform the function of identifying specifically which remainingportion to obtain from network location 315. It should be understoodthat stream fault handler 314 may communicate directly with networkinterface 322, but may also initiate the retrieval or otherwisecommunicate with network interface 322 by way of other intermediateelements.

Network interface 322 responsively communicates with network location315 to request the additional data (step 396). The request may identifya particular module, file range, or other such identifier that allowssystems or sub systems within network location 315 to identify therelevant data. Network location 315 then returns the additional data tonetwork interface (step 397). In this example, the additional data areprovided to stream fault handler 314 (step 398) for insertion into anappropriate location within application region 310. Stream fault handler314 can then allow the process associated with program instructions 312that was interrupted by the access violation, to resume.

While the preceding discussion made reference to additional data, suchas bitmap images or tables, it should be understood that other types ofinformation could be retrieved from network location 315 in this manner.For example, program instructions 312 may include additional codecapable of reading new code from a file and managing mappings,relocations, bindings, and other functions to make code executable inmemory. The additional code could thus be retrieved from a file onnetwork location 315 in the same manner as other types of data, such asimages.

In an alternative, a different type of hook could be implementeddifferent than monitoring read requests. Rather, stream fault handler314 could communicate with a portion of O/S interface 316 that handlesopen requests. In other words, anytime code executing from withinapplication region 310 attempts to open a file that has yet to be downloaded, O/S interface 316 could communicate the event to stream faulthandler 314. Stream fault handler 314 could then proceed to obtain thefile, or portions of the file, from network location 315.

FIG. 5 illustrates a component view 500 of an application program in animplementation. Component view 500 includes application code 501, streamfault exception handler 503, memory detour 507, module manager 509, datadetour 511, data file manager 513, sparse files 521, 522, 523, 524, 525,an d526, spares modules 534 and 535, portable execution (PE) module 546,and streaming interface 551. Stream fault exception handler 503, memorydetour 507, module manager 509, data detour 511, data file manager 513,sparse files 521-526, spares modules 534 and 535, and portable execution(PE) module 546 are each components that may be found in stream faulthandlers, such as stream fault handler 314 illustrated in FIGS. 3 and 4.It should be understood that streaming interface 551 may or may not beconsidered part of the application program.

Application code 501 comprises at least an initial portion of theprogram application that is downloaded as part of a boot block. The bootblock includes application code 501, as well as the other elementsillustrated in component view 500. As application code 501 is executed,stream fault exception handler 503 monitors for faults, such as accessviolations, read requests, and file open requests, that may triggerdownloading of additional portions of the application program.

Stream fault exception handler 503 is the first chance exception filterwhich provides the core of an exception based user mode streaming model.Stream fault exception handler 503 may be invoked anytime an exceptionoccurs. Stream fault exception handler 503 communicates with data detour511 and memory detour 507 to learn of access violations, read requests,file open requests, and other suitable faults that may triggerdownloading of additional portions of the program application.

Module manager 509 is responsible for handling memory stream faults. Forexample, a memory stream fault may be an access to a virtual memory thatis inside the memory mapped region of a sparse file. One way for thestream fault exception handler to be invoked on a memory stream fault isto mark the corresponding virtual memory page with a PAGE_NOACCESS bit.This will cause a memory stream fault to trigger an access violationexception which will invoke stream fault exception handler 503. Modulemanager 509 maintains an internal list of memory mapped files. Eachmemory mapped file is tracked by a corresponding PE module 546 or sparsemodule 534, 535. The handling of a memory stream fault is done byidentifying which module object covers the memory region and thencontrol is passed to the corresponding PE module 546 or sparse module534, 535.

PE module 546 is representative of a PEModule class that extends theSparseModule class, which is discussed in more detail below. PE module546 handles memory stream faults for any PE format sparse files, such asdynamic linked library files or executable files. This wrapper class isresponsible for handling a memory stream fault inside of a PE module.When such a fault occurs, PE module 546 translates the virtual memoryaddress associated with the fault to a file range request. Thistranslation will ensure cross-page/cross-section accesses. Next, thebase class (SparseModule) is requested to provide the data. Ultimately,raw file data ranges are translated back into virtual ranges. Thecontiguous range of data in a file might not be contiguous in virtualmemory. Any other remaining relocation adjustments on raw data areperformed. Then, the base class (SparseModule) is called to move thefixed-up buffer to a final destination in virtual memory.

Sparse modules 534, 535 are representative of a SparseModule class andhandle memory stream faults for any sparse files 521-526 that are memorymapped with the exception of PE files. A memory stream fault inside amemory map is handled by translating the virtual memory address to filerange request, requesting the base class (sparse file) to provide thedata, and copying the data to a corresponding virtual memory region. Insome cases, the region of virtual memory is first opened to write beforethe buffer can be copied in.

Sparse files 521-526 are representative of a SparseFile class thathandles requests for file ranges from within an executing process. Theserequests can come from the SparseModule, PEModule or ModuleManagerclasses described above or directly from data file manager 513. Thisclass is a wrapper around streaming interface 551 which provides accessto a streaming engine (not shown). The streaming engine performs actualdownloads, staging and on disk file management.

Data file manager 513 is responsible for handling data stream faults.Unlike module manager 509, data file manager 513 does not have to beinitialized. Rather, it can directly hook access to data files throughdata detours 511.

The following is a brief discussion of a memory stream fault and theflow through component view 500 when handling such faults. First,application code 501 attempts to access a marked page within virtualmemory, which causes an access violation. Stream fault exception handler503 captures the violation and calls module manager 509 with the virtualmemory address where the access violation occurred. Module manager 509finds the Sparse Module or PE Module which contains the address, whichin this case is assumed to be sparse module 534 for illustrativepurposes. Module manager 509 then passes the request on to sparse module534.

Spares module 534 then identifies the virtual page that contains thevirtual memory address. Sparse module 534 converts the virtual page to afile range and requests that sparse file 523 obtain the data. Sparsefile 523 passes the file range request onto streaming interface 551.Streaming interface 551 returns with a buffer containing the data forthe requested range. This buffer is passed on to sparse module 534,which copies this data to the corresponding virtual page. Control isthen returned back up the chain and the process that was interrupted cancontinue.

The following discussion relates to the flow through component view 500in the event of a data stream fault. Application code 501 attempts toread data from a file. Data detours 511 captures the call and calls datafile manager 513. Data file manager finds the corresponding Sparse Fileobject in its current list (or creates one as necessary), which in thiscase is assumed to be sparse file 521. The request is passed to sparsefile 521. Sparse file 521 passes the file range request to streaminginterface 551, which returns with a buffer containing the data for therequested range. This buffer is passed to data manager 513, which passesit to data detours 511. Data detours 511 returns the buffer toapplication code 501 for consumption.

The functional block diagrams, operational sequences, and flow diagramsprovided in the Figures are representative of exemplary architectures,environments, and methodologies for performing novel aspects of thedisclosure. While, for purposes of simplicity of explanation, themethodologies included herein may be in the form of a functionaldiagram, operational sequence, or flow diagram, and may be described asa series of acts, it is to be understood and appreciated that themethodologies are not limited by the order of acts, as some acts may, inaccordance therewith, occur in a different order and/or concurrentlywith other acts from that shown and described herein. For example, thoseskilled in the art will understand and appreciate that a methodologycould alternatively be represented as a series of interrelated states orevents, such as in a state diagram. Moreover, not all acts illustratedin a methodology may be required for a novel implementation.

The included descriptions and figures depict specific implementations toteach those skilled in the art how to make and use the best mode. Forthe purpose of teaching inventive principles, some conventional aspectshave been simplified or omitted. Those skilled in the art willappreciate variations from these implementations that fall within thescope of the invention. Those skilled in the art will also appreciatethat the features described above can be combined in various ways toform multiple implementations. As a result, the invention is not limitedto the specific implementations described above, but only by the claimsand their equivalents.

What is claimed is:
 1. One or more computer readable media having storedthereon at least an event handling portion of an application program forfacilitating streaming of the application program that when executed bya computing system directs the computing system to at least: monitor foran event associated with operations of an initial portion of theapplication program that was downloaded with the event handling portion,wherein the operations comprise a jump to a range of virtual memoryallocated to an additional portion of the application program not yetdownloaded to the computing system; in response to detecting the event,pause the operations of the initial portion of the application programand initiate downloading of the additional portion of the applicationprogram to the computing system; and upon downloading the additionalportion of the application program to the computing system, resume theoperations of the initial portion of the application program thatinvolves the additional portion of the application program.
 2. The oneor more computer readable media of claim 1 wherein the event associatedwith the operations of the initial portion of the application programcomprises an access violation corresponding to an access restricted pagewithin the range of virtual memory allocated to the application program.3. The one or more computer readable media of claim 2 wherein the eventhandler portion of the application program, when executed by thecomputing system, further directs the computing system to identify theadditional portion from remaining portions of the application programyet to be downloaded that correspond to the access restricted page. 4.The one or more computer readable media of claim 2 wherein theadditional portion of the application program comprises executable code.5. The one or more computer readable media of claim 2 wherein theadditional portion of the application program comprises non-executabledata to be processed by the initial portion of the application program.6. The one or more computer readable media of claim 1 wherein the eventassociated with the operations of the initial portion of the applicationprogram comprises an attempt to read data from the additional portion ofthe application program.
 7. The one or more computer readable media ofclaim 1 having stored thereon the initial portion of the applicationprogram that, when executed by the computing system, directs thecomputing system to map the event handler portion and the initialportion of the application program within a range of memory allocated tothe application program.
 8. The one or more computer readable media ofclaim 7 wherein the initial portion of the application program, whenexecuted by the computing system, directs the computing system to mapthe additional portion of the application program within the range ofmemory allocated to the application program, wherein the memorycomprises virtual memory.
 9. A method of operating an event handlingportion of an application program on a computing system when streamingthe application program to the computing system, the method comprising:monitoring for an event associated with operations of an initial portionof the application program that was downloaded with the event handlingportion, wherein the operations comprise a jump to a range of virtualmemory allocated to an additional portion of the application program notyet downloaded to the computing system; in response to detecting theevent, pausing the operations of the initial portion of the applicationprogram and initiate downloading of the additional portion of theapplication program to the computing system; and upon downloading theadditional portion of the application program to the computing system,resuming the operations of the initial portion of the applicationprogram that involves the additional portion of the application program.10. The method of claim 9 wherein the event associated with theoperations of the initial portion of the application program comprisesan access violation corresponding to an access restricted page withinthe range of virtual memory allocated to the application program. 11.The method of claim 10 further comprising identifying the additionalportion from remaining portions of the application program yet to bedownloaded that correspond to the access restricted page.
 12. The methodclaim 10 wherein the additional portion of the application programcomprises executable code.
 13. The method of claim 10 wherein theadditional portion of the application program comprises non-executabledata to be processed by the initial portion of the application program.14. The method of claim 9 wherein the event associated with theoperations of the initial portion of the application program comprisesan attempt to read data from the additional portion of the applicationprogram.
 15. The method of claim 9 wherein the event handler portion andthe initial portion of the application program are mapped to a range ofmemory allocated to the application program.
 16. The method of claim 15the additional portion of the application program is also mapped to therange of memory allocated to the application program, wherein the memorycomprises virtual memory.
 17. An apparatus comprising: one or morecomputer readable storage devices; a computing system operativelycoupled with the one or more computer readable storage devices; andprogram instructions stored on the one or more computer readable storagedevices and comprising at least an event handling portion of anapplication program for facilitating streaming of the applicationprogram that, when executed by the computing system directs thecomputing system to at least: monitor for an event associated withoperations of an initial portion of the application program that wasdownloaded with the event handling portion, wherein the operationscomprise a jump to a range of virtual memory allocated to an additionalportion of the application program not yet downloaded to the computingsystem; in response to detecting the event, pause the operations of theinitial portion of the application program and initiate downloading ofthe additional portion of the application program to the computingsystem; and upon downloading the additional portion of the applicationprogram to the computing system, resume the operations of the initialportion of the application program that involves the additional portionof the application program.
 18. The apparatus of claim 17 wherein theevent comprises an access violation that corresponds to an accessrestricted page within a range of virtual memory allocated to theapplication program, wherein the access restricted page comprises a pageloaded into the range of virtual memory but not accessible by theinitial portion of the application, wherein the access violation is nota page fault, and wherein to monitor for the event, the event handlingportion of the application program directs the computing system to atleast: receive a notification of the access violation from an operatingsystem element that the access violation occurred.
 19. The apparatus ofclaim 18 wherein the event handler portion of the application program,when executed by the computing system, further directs the computingsystem to identify the additional portion from remaining portions of theapplication program yet to be downloaded corresponding to the accessrestricted page.
 20. The apparatus of claim 18 wherein the additionalportion of the application program comprises one of executable code ornon-executable data to be processed by the initial portion of theapplication program.